/**
 @该函数用于前的多选按钮的 全选/反选 功能
 @author : Mr.xue
 @date   : 2015.12.27
 * 函数调用例如：var abc = new isChecked("#checkbox");
 * allCheckbox_selector ：参数，传入代表全选功能的checkbox按钮 选择器
 * parent_selector ：参数，限制全选checkbox按钮的作用域 选择器
 * isGetAttr :参数 ， 公有方法getValue()要获取值(value)的键(key)，例如要获取checkbox上的checked属性的值 new isChecked("[name=all]","#demo1","checked");
 * 公有方法接口，可获取选中当前checkbox的value值,调用例如：abc.getValue();

 html代码示例：
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <head>
 <meta charset="utf-8">
 <title>函数示例DEMO</title>
 <script type="text/javascript" src="../jquery-1.11.3.min.js"></script>
 <script type="text/javascript" src="boxIsChecked.js"></script>
 </head>
 <body>
	 <div class="demo">
		 <div id="demo1">
			 <input type="checkbox" name="all">demo1全选
			 <input type="checkbox" value="1">
			 <input type="checkbox" value="2">
			 <input type="checkbox" value="3">
			 <input type="checkbox" value="4">
			 <input type="checkbox" value="5">
			 <input type="checkbox" value="6">
			 <input type="checkbox" name="all">demo1全选
		 </div>
		 <div id="demo2">
			 <input type="checkbox" name="all">demo2全选
			 <input type="checkbox" value="8" data-check="你好">
			 <input type="checkbox" value="9" data-check="猴赛雷">
			 <input type="checkbox" value="10" data-check="获取到我了">
			 <input type="checkbox" value="11" data-check="！">
			 <input type="checkbox" name="all">demo2全选
		 </div>
		 <div>
			 <button type="button" id="btn1">获取demo1值</button>
			 <button type="button" id="btn2">获取demo2值</button>
		</div>
	</div>
 <script type="text/javascript">
 //声明一个函数用于全选，作用在demo2,getValue()默认获取的属性是value
 var demo1 = new isChecked("[name=all]","#demo1");
 //声明一个函数用于全选，作用在demo2,但getValue()获取的属性为data-check
 var demo2 = new isChecked("[name=all]","#demo2","data-check");

 $("#btn1").click(function(){  //获取demo1的值
	alert(demo1.getValue());
});
 $("#btn2").click(function(){  //获取demo2的值
	alert(demo2.getValue());
});

 </script>
 </body>
 </html>
 */
function isChecked(allCheckbox_selector, parent_selector, isGetAttr) {

    var strParentBox = (parent_selector || "");
    var strIsGetAttr = (isGetAttr || "value");
    var strAllbox = strParentBox + " " + allCheckbox_selector;
    var strSinglebox = strParentBox + " :checkbox:not(" + strAllbox + ")";
    var allBox = $(strAllbox);
    var singleBox = $(strSinglebox);

    this.getValue = function () {
        var checkboxVal = "";
        singleBox.each(function (index, domEle) {
            if ($(domEle).is(":checked")) { //判断当前是否选中
                checkboxVal += "," + $(this).attr(strIsGetAttr);
            }
            ;
        });
        return checkboxVal.substring(1);
    };
    $("body").on("click", strAllbox, function () {
        var that = $(this);
        var single = $(strSinglebox);
        if (that.is(":checked")) {
            single.prop("checked", true);
            allBox.prop("checked", true);
        } else {
            single.prop("checked", false);
            allBox.prop("checked", false);
        }
        ;
        singleBox = single;
    });
    $("body").on("change", strSinglebox, function () {
        var single = $(strSinglebox);
        var message = checking(singleBox);  //调用checking()函数，检查页面中的checkbox是否全部被选中
        if (message) {
            allBox.prop("checked", true); //设置
        } else {
            allBox.prop("checked", false); //设置
        }
        ;
        singleBox = single;
    });

    function checking(singlebox) {
        var count = singlebox.length; //获取页面中checkbox的总长度
        var checkedCount = 0;  //记录选中的长度
        singlebox.each(function (index, domEle) {
            if ($(domEle).is(":checked")) { //判断当前是否选中
                checkedCount++ //选中的长度加一
            }
            ;
        });
        return count == checkedCount; //比较返回布尔值
    };
};